#include <cstdio>
#include <vector>
#include <limits>

namespace DeptMan
{
class Student
{
	private:

		std::string mName;
		std::vector<unsigned> mPreferredProjects;
		double mCAP;
		unsigned mAllocatedProjectNumber;

	public :
		Student(const std::string& name)
			: mName(name),
			  mPreferredProjects({}),
			  mCAP(0.0),
			  mAllocatedProjectNumber(std::numeric_limits<unsigned>::max())
		{}

		void SetPreferredProjects(const std::vector<unsigned>& preferredProjects)
		{
			mPreferredProjects = preferredProjects;
		}

		std::vector<unsigned> GetPreferredProjects() const
		{
			return mPreferredProjects;
		}

		void SetCAP(double cap)
		{
			mCAP = cap;
		}

		double GetCAP() const
		{
			return mCAP;
		}

		void SetAllocatedProjectNumber(unsigned projNum)
		{
			mAllocatedProjectNumber = projNum;
		}

		unsigned GetAllocatedProjectNumber() const
		{
			return mAllocatedProjectNumber;
		}

		Student operator < (const Student& otherStudent) const
		{
			double score_lhs = this->GetCAP();
			if ( score_lhs < otherStudent.GetCAP())
			{
				return *this;
			}
			else
			{
				return otherStudent;
			}
		}
};

void AllocateStudents(std::vector<Student>& students)
{

}

}//namespace

